/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package escom.ipn.modelo.dao;
import escom.ipn.modelo.dto.CoordenadaPieTierraClass;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author omar moreno
 */
public class CoordenadaRecursoDAO {
           public static final String SQL_SELECT_ALL ="SELECT a.id_radio,a.latitud,a.longitud,b.estado,c.nombre FROM "
            +"RADIO_COMUNICACION a INNER JOIN CAT_ESTADO_RECURSO b ON "
            +"a.CAT_ESTADO_RECURSO_id_estado_recurso=b.id_estado_recurso "
            +"INNER JOIN POLICIA_PIE_TIERRA c ON a.id_radio=c.RADIO_COMUNICACION_id_radio and b.estado not in ('No Disponible') WHERE c.SECTOR_id_sector=?";
          
           public static final String SQL_SELECT="SELECT DISTINCT a.id_radio,a.latitud,a.longitud,b.estado,c.nombre FROM " 
            +"RADIO_COMUNICACION a INNER JOIN CAT_ESTADO_RECURSO b ON "
            +"a.CAT_ESTADO_RECURSO_id_estado_recurso=b.id_estado_recurso "
            +"INNER JOIN POLICIA_PIE_TIERRA c ON a.id_radio=c.RADIO_COMUNICACION_id_radio "
            +"INNER JOIN INCIDENTE_RADIOS d ON a.id_radio=d.RADIO_COMUNICACION_id_radio "
            +"WHERE d.INCIDENTE_ID_incidente=? and b.estado not in('Libre')";
           
           
           public static final String SQL_SELECT_ALL_PATROLS="SELECT a.id_radio,a.latitud,a.longitud,b.estado,c.placas as nombre FROM "
            +"RADIO_COMUNICACION a INNER JOIN CAT_ESTADO_RECURSO b ON "
            +"a.CAT_ESTADO_RECURSO_id_estado_recurso=b.id_estado_recurso "
            +"INNER JOIN CARRO_RADIO_PATRULLA c ON a.id_radio=c.RADIO_COMUNICACION_id_radio and b.estado not in ('No Disponible') WHERE c.SECTOR_id_sector=?";
           
           public static final String SQL_SELECT_PATROLS="SELECT DISTINCT a.id_radio,a.latitud,a.longitud,b.estado,c.placas as nombre FROM " 
            +"RADIO_COMUNICACION a INNER JOIN CAT_ESTADO_RECURSO b ON "
            +"a.CAT_ESTADO_RECURSO_id_estado_recurso=b.id_estado_recurso "
            +"INNER JOIN CARRO_RADIO_PATRULLA c ON a.id_radio=c.RADIO_COMUNICACION_id_radio "
            +"INNER JOIN INCIDENTE_RADIOS d ON a.id_radio=d.RADIO_COMUNICACION_id_radio "
            +"WHERE d.INCIDENTE_ID_incidente=? and b.estado not in('Libre')";

    
    /*public void createCoordenadaIncidente(coordenadaIncidenteClass a, Connection conn)
            throws SQLException {
        PreparedStatement ps = null;
        try 
        {
            ps = conn.prepareStatement(SQL_INSERT);
            ps.setString(1, a.getId());
            ps.setString(2, a.getLatitude());
            ps.setString(3, a.getLongitude());
            ps.executeUpdate();
        } 
        finally
        {
            cerrar(ps);
            cerrar(conn);
        }
    }*/
    
    public List loadCoordenadasRecurso(CoordenadaPieTierraClass a,Connection conn)
            throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(SQL_SELECT);
            ps.setString(1, a.getId());
            rs = ps.executeQuery();
            List resultados = getResults(rs);
           if (resultados.size() > 0) {
                return resultados;
            } else {
                return null;
            }
        } finally {
            cerrar(rs);
            cerrar(ps);
            cerrar(conn);
        }
    }
    
     public List loadCoordenadasPatrullas(CoordenadaPieTierraClass a,Connection conn)
            throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(SQL_SELECT_PATROLS);
            ps.setString(1, a.getId());
            rs = ps.executeQuery();
            List resultados = getResults(rs);
           if (resultados.size() > 0) {
                return resultados;
            } else {
                return null;
            }
        } finally {
            cerrar(rs);
            cerrar(ps);
            cerrar(conn);
        }
    }
    
    public List getCoordenadas(CoordenadaPieTierraClass a,Connection conn)
    throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            
            ps = conn.prepareStatement(SQL_SELECT_ALL);
            ps.setString(1, a.getSector());
            rs = ps.executeQuery();
            List resultados = getResults(rs);
            if (resultados.size() > 0) {
                return resultados;
            } else {
                return null;
            }
        } finally {
            cerrar(rs);
            cerrar(ps);
            cerrar(conn);
        }
    }
    
    public List getCoordenadasPatrullas(CoordenadaPieTierraClass a,Connection conn)
    throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(SQL_SELECT_ALL_PATROLS);
            ps.setString(1, a.getSector());
            rs = ps.executeQuery();
            List resultados = getResults(rs);
            if (resultados.size() > 0) {
                return resultados;
            } else {
                return null;
            }
        } finally {
            cerrar(rs);
            cerrar(ps);
            cerrar(conn);
        }
    }
    
    private List getResults(ResultSet rs)
            throws SQLException {
        List results = new ArrayList();
        while (rs.next()) 
        {
            CoordenadaPieTierraClass a = new CoordenadaPieTierraClass();
            a.setRadio(rs.getString("id_radio"));
            a.setLatitude(rs.getString("latitud"));
            a.setLongitude(rs.getString("longitud"));
            a.setEstado(rs.getString("estado"));
            a.setNombreRecurso(rs.getString("nombre"));
            results.add(a);
        }
        return results;
    }
    
    private void cerrar(Connection cnn) {
        if (cnn != null) {
            try {
                cnn.close();
            } catch (SQLException e) {
                //manejo del error
            }
        }
    }

    private void cerrar(PreparedStatement ps) {
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                //manejo del error
            }
        }
    }

    private void cerrar(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                //manejo del error
            }
        }
    }    
}
